{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "HEzhxDvV7suN",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "HEzhxDvV7suN",
    "outputId": "dde8c2b9-4ede-4ec0-9bbe-ddcdc9d73bd2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "zsh:1: no matches found: transformers[torch]\n"
     ]
    }
   ],
   "source": [
    "!pip install evaluate datasets transformers[torch]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "17c1ceb7-3ed7-49c5-8d86-75f05d5b9e46",
   "metadata": {
    "id": "17c1ceb7-3ed7-49c5-8d86-75f05d5b9e46"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/homebrew/lib/python3.11/site-packages/bitsandbytes/cextension.py:34: UserWarning: The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers, 8-bit multiplication, and GPU quantization are unavailable.\n",
      "  warn(\"The installed version of bitsandbytes was compiled without GPU support. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'NoneType' object has no attribute 'cadam32bit_grad_fp32'\n"
     ]
    }
   ],
   "source": [
    "from transformers import AutoTokenizer, AutoModelForSequenceClassification, DataCollatorWithPadding, Trainer, TrainingArguments\n",
    "import evaluate\n",
    "import numpy as np\n",
    "from datasets import load_metric, load_dataset\n",
    "import random\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e589b8a4-c8b5-464a-aad0-8c8e13054e48",
   "metadata": {
    "id": "e589b8a4-c8b5-464a-aad0-8c8e13054e48"
   },
   "outputs": [],
   "source": [
    "# Defining a constant SEED for reproducibility in random operations\n",
    "SEED = 42\n",
    "\n",
    "# Setting the seed for the random library to ensure consistent results\n",
    "random.seed(SEED)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7d2dc0c4-8932-4889-975d-05160be113ce",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "7d2dc0c4-8932-4889-975d-05160be113ce",
    "outputId": "1d98e2a2-1b7d-459b-f3a4-136770b28035"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Dataset({\n",
       "    features: ['package_name', 'review', 'date', 'star'],\n",
       "    num_rows: 288065\n",
       "})"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 'star' is a column in our dataset and we want to convert it to a ClassLabel column\n",
    "# so we can stratify our samples.\n",
    "\n",
    "# Importing the ClassLabel module to represent categorical class labels\n",
    "from datasets import ClassLabel\n",
    "\n",
    "# Loading the 'app_reviews' dataset's training split into the 'dataset' variable\n",
    "dataset = load_dataset('app_reviews', split='train')\n",
    "\n",
    "# Converting the 'star' column in our dataset to a ClassLabel type\n",
    "# This allows for categorical representation and easier handling of classes\n",
    "dataset = dataset.class_encode_column('star')\n",
    "\n",
    "# Displaying the dataset to see the changes\n",
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ffe447c4-fc0e-4727-8538-aee1d4d2fa53",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "ffe447c4-fc0e-4727-8538-aee1d4d2fa53",
    "outputId": "5ca12e54-4e5f-462e-be5b-dd553c30c727"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatasetDict({\n",
       "    train: Dataset({\n",
       "        features: ['package_name', 'review', 'date', 'star'],\n",
       "        num_rows: 172839\n",
       "    })\n",
       "    test: Dataset({\n",
       "        features: ['package_name', 'review', 'date', 'star'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "    val: Dataset({\n",
       "        features: ['package_name', 'review', 'date', 'star'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "})"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Splitting the dataset into a training set and a test set.\n",
    "# We reserve 20% of the data for testing and use stratification on the 'star' column\n",
    "# to ensure both sets have an equal distribution of each star category.\n",
    "dataset = dataset.train_test_split(test_size=0.2, seed=SEED, stratify_by_column='star')\n",
    "\n",
    "# Now, we further split our training dataset to reserve 25% of it for validation.\n",
    "# Again, we stratify by the 'star' column to keep the distribution consistent.\n",
    "df = dataset['train'].train_test_split(test_size=.25, seed=SEED, stratify_by_column='star')\n",
    "\n",
    "# Assigning the split datasets to their respective keys:\n",
    "# - The remaining 75% of our initial training data becomes the new training dataset.\n",
    "dataset['train'] = df['train']\n",
    "\n",
    "# - The 25% split from our initial training data becomes the validation dataset.\n",
    "dataset['val'] = df['test']\n",
    "\n",
    "# Displaying the dataset to see the distribution across train, test, and validation sets.\n",
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f25c4761-bc78-408c-aa4d-21119b9779b1",
   "metadata": {
    "id": "f25c4761-bc78-408c-aa4d-21119b9779b1"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/homebrew/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "MODEL = 'distilbert-base-cased'\n",
    "\n",
    "tokenizer = AutoTokenizer.from_pretrained(MODEL)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1c17e580-5916-450b-98da-c7c9b7474646",
   "metadata": {
    "id": "1c17e580-5916-450b-98da-c7c9b7474646"
   },
   "outputs": [],
   "source": [
    "# simple function to batch tokenize utterances with truncation\n",
    "def preprocess_function(examples):  # each example is an element from the Dataset\n",
    "    return tokenizer(examples[\"review\"], truncation=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8f17cad6-e4e9-4b10-ab03-7dd2e5e7d669",
   "metadata": {
    "id": "8f17cad6-e4e9-4b10-ab03-7dd2e5e7d669"
   },
   "outputs": [],
   "source": [
    "# DataCollatorWithPadding creates batch of data. It also dynamically pads text to the\n",
    "#  length of the longest element in the batch, making them all the same length.\n",
    "#  It's possible to pad your text in the tokenizer function with padding=True, dynamic padding is more efficient.\n",
    "\n",
    "data_collator = DataCollatorWithPadding(tokenizer=tokenizer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "626208d0-1e66-4559-a80b-f2888cc1a1cf",
   "metadata": {
    "id": "626208d0-1e66-4559-a80b-f2888cc1a1cf"
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2728591b-2795-4bb3-b1a6-d83a31a51c47",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "2728591b-2795-4bb3-b1a6-d83a31a51c47",
    "outputId": "da4a7c91-738a-4de5-c93f-f74ea444145a"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of DistilBertForSequenceClassification were not initialized from the model checkpoint at distilbert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight', 'pre_classifier.bias', 'pre_classifier.weight']\n",
      "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
     ]
    }
   ],
   "source": [
    "sequence_clf_model = AutoModelForSequenceClassification.from_pretrained(\n",
    "    MODEL,\n",
    "    num_labels=5,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a44cd57d-d439-4432-b899-995dbc35d712",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "a44cd57d-d439-4432-b899-995dbc35d712",
    "outputId": "39007710-78fb-4320-8455-65988dc010a6"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DistilBertForSequenceClassification(\n",
       "  (distilbert): DistilBertModel(\n",
       "    (embeddings): Embeddings(\n",
       "      (word_embeddings): Embedding(28996, 768, padding_idx=0)\n",
       "      (position_embeddings): Embedding(512, 768)\n",
       "      (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
       "      (dropout): Dropout(p=0.1, inplace=False)\n",
       "    )\n",
       "    (transformer): Transformer(\n",
       "      (layer): ModuleList(\n",
       "        (0-5): 6 x TransformerBlock(\n",
       "          (attention): MultiHeadSelfAttention(\n",
       "            (dropout): Dropout(p=0.1, inplace=False)\n",
       "            (q_lin): Linear(in_features=768, out_features=768, bias=True)\n",
       "            (k_lin): Linear(in_features=768, out_features=768, bias=True)\n",
       "            (v_lin): Linear(in_features=768, out_features=768, bias=True)\n",
       "            (out_lin): Linear(in_features=768, out_features=768, bias=True)\n",
       "          )\n",
       "          (sa_layer_norm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
       "          (ffn): FFN(\n",
       "            (dropout): Dropout(p=0.1, inplace=False)\n",
       "            (lin1): Linear(in_features=768, out_features=3072, bias=True)\n",
       "            (lin2): Linear(in_features=3072, out_features=768, bias=True)\n",
       "            (activation): GELUActivation()\n",
       "          )\n",
       "          (output_layer_norm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (pre_classifier): Linear(in_features=768, out_features=768, bias=True)\n",
       "  (classifier): Linear(in_features=768, out_features=5, bias=True)\n",
       "  (dropout): Dropout(p=0.2, inplace=False)\n",
       ")"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sequence_clf_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "92a44187-d471-40f7-a47c-1df5e3083440",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 49,
     "referenced_widgets": [
      "dd58f4f2ea6b4d509657c6d5eec173ef",
      "e84b9c11d19a4bfbaabf7c58a9862c67",
      "abfb88580b244b84b1aedfcda581d7e0",
      "517dcd9158d44df3beb73e81141f5a56",
      "6e985377fd19491eb096d8c61fcb0890",
      "5dfe52672d564ca3b9abacc81cd6d879",
      "d47af86af90e49999b8d75a00432ad4e",
      "8262cbbf290a4dcbb580f4535cd6e0e4",
      "5c93d9b6edc7496c895ef3c2b5abc985",
      "6d390b97453f43fe84a7a37c0efc8740",
      "f2a00172e2ec44daa931cc6d1ff4f5ac"
     ]
    },
    "id": "92a44187-d471-40f7-a47c-1df5e3083440",
    "outputId": "f47a57bd-c1f7-49cd-f73a-1fb1dfa208cd"
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dd58f4f2ea6b4d509657c6d5eec173ef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Map:   0%|          | 0/57613 [00:00<?, ? examples/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset = dataset.map(preprocess_function, batched=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1b42374d-8e48-4b0e-88a7-87b801067855",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "1b42374d-8e48-4b0e-88a7-87b801067855",
    "outputId": "57ba3e9e-eb47-452b-952b-7265018da237"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatasetDict({\n",
       "    train: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 172839\n",
       "    })\n",
       "    test: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "    val: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "})"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset = dataset.rename_column(\"star\", \"label\")\n",
    "dataset = dataset.remove_columns(['package_name', 'review', 'date'])\n",
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c5824878-f25d-450b-8afd-81a3a0879abc",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 448
    },
    "id": "c5824878-f25d-450b-8afd-81a3a0879abc",
    "outputId": "4f395519-f995-468f-e208-1930b4ce22fb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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rCzzis2TTz6pFStWaPbs2XriiSe0ZcsWvfPOO9q48f8/iZWbm6uMjAwNGzZMw4cP15IlS3T27FnzKTIAAGBtrQ5Cu3fv1ujRo83XTffUZGRkaPXq1XrwwQdVVFSkBQsW6Omnn1afPn3029/+ViNHjjT3efXVV+Xv76+JEyeqrq5ONptNv/rVr8zxgIAAbdiwQdOnT1dSUpK6dOmijIwMzZs3z6yJj4/Xxo0bNXPmTC1dulS33HKL3njjDfPReUl6+OGH9eWXXyo/P19Op1NDhw5VSUlJsxuoAQCANbU6CI0aNUqG0fJj30888YSeeOKJbx0PCQnRypUrv/WHMkpSr169rviE0qhRo7R3794Wa7Kzs5Wdnd1iDQAAsCZ+1xgAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALAsghAAALCsVgeh8vJyPfDAA4qNjZWfn5+Ki4u/tfbJJ5+Un5+flixZ4rH95MmTSk9PV1hYmCIiIpSZmakzZ8541Ozbt0/33HOPQkJCFBcXp8LCwmbzr1+/Xn379lVISIgGDRqkTZs2eYwbhqH8/Hz16NFDnTt3VnJyso4ePdraUwYAADeoVgehs2fPasiQIVq5cmWLde+++6527Nih2NjYZmPp6ek6ePCg7Ha7NmzYoPLyck2bNs0cd7lcSklJUa9evVRZWamXX35ZBQUFev31182a7du3a8qUKcrMzNTevXuVlpamtLQ0HThwwKwpLCzUsmXLVFRUpIqKCnXp0kU2m03nz59v7WkDAIAbUKfW7jB+/HiNHz++xZq//vWveuqpp7R582alpqZ6jB06dEglJSXatWuXhg0bJklavny57r//fr3yyiuKjY3VmjVrVF9fr1WrVikoKEgDBgxQVVWVFi9ebAampUuXaty4cZo1a5Ykaf78+bLb7VqxYoWKiopkGIaWLFmiOXPmaMKECZKkt956S9HR0SouLtbkyZNbe+oAAOAG0+og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PN1lt9sVFham/v37mzUXz9FU0zRHUFCQEhISPGoaGxtVVlZm1gAAAGvz+hWhrKwsrV27Vr///e918803m/f0hIeHq3PnzgoPD1dmZqZyc3MVFRWlsLAwPfXUU0pKStKIESMkSSkpKerfv78effRRFRYWyul0as6cOcrKyjKv2Dz55JNasWKFZs+erSeeeEJbtmzRO++8o40bN5pryc3NVUZGhoYNG6bhw4dryZIlOnv2rPkUGQAAsDavB6HXXntNkjRq1CiP7W+++ab+9V//VZL06quvyt/fXxMnTlRdXZ1sNpt+9atfmbUBAQHasGGDpk+frqSkJHXp0kUZGRmaN2+eWRMfH6+NGzdq5syZWrp0qW655Ra98cYb5qPzkvTwww/ryy+/VH5+vpxOp4YOHaqSkpJmN1ADAABr8noQMowrPxIeEhKilStXauXKld9a06tXrys+oTRq1Cjt3bu3xZrs7GxlZ2dfcU0AAMB6+F1jAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsghCAADAsjq19wLQsdz67Mb2XkKLggMMFQ6XBhZsVl2DnyTp85dS23lVAIDrFVeEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZRGEAACAZXVq7wW0hZUrV+rll1+W0+nUkCFDtHz5cg0fPry9l4U2cuuzG9t7Ca32+Uup7b0EALCEG/6K0Lp165Sbm6sXXnhBe/bs0ZAhQ2Sz2VRTU9PeSwMAAO3shg9Cixcv1tSpU/X444+rf//+KioqUmhoqFatWtXeSwMAAO3shv5orL6+XpWVlcrLyzO3+fv7Kzk5WQ6Ho1l9XV2d6urqzNenT5+WJJ08eVJut/ua1+N2u3Xu3Dn9/e9/V2BgoDpdOHvNc8JTp0ZD5841qpPbXw2Nfu29nH/Y3//+9/Zewre69N8xvIv++h499q3rob9fffWVJMkwjCvW3tBB6H//93/V0NCg6Ohoj+3R0dE6fPhws/oFCxZo7ty5zbbHx8f7bI3wvkfaewFe0G1Re68AADq+r776SuHh4S3W3NBBqLXy8vKUm5trvm5sbNTJkyfVtWtX+fld+9UFl8uluLg4ffHFFwoLC7vm+dAcPfY9euxb9Nf36LFvXQ/9NQxDX331lWJjY69Ye0MHoW7duikgIEDV1dUe26urqxUTE9OsPjg4WMHBwR7bIiIivL6usLAw/uPzMXrse/TYt+iv79Fj32rv/l7pSlCTG/pm6aCgICUkJKisrMzc1tjYqLKyMiUlJbXjygAAwPXghr4iJEm5ubnKyMjQsGHDNHz4cC1ZskRnz57V448/3t5LAwAA7eyGD0IPP/ywvvzyS+Xn58vpdGro0KEqKSlpdgN1WwgODtYLL7zQ7OM3eA899j167Fv01/fosW91tP76GVfzbBkAAMAN6Ia+RwgAAKAlBCEAAGBZBCEAAGBZBCEAAGBZBKE2tHLlSt16660KCQlRYmKidu7c2d5L6hDKy8v1wAMPKDY2Vn5+fiouLvYYNwxD+fn56tGjhzp37qzk5GQdPXrUo+bkyZNKT09XWFiYIiIilJmZqTNnzrThWVy/FixYoDvvvFM333yzunfvrrS0NB05csSj5vz588rKylLXrl110003aeLEic1+UOnx48eVmpqq0NBQde/eXbNmzdKFCxfa8lSuW6+99poGDx5s/oC5pKQk/eEPfzDH6a93vfTSS/Lz81NOTo65jR5fm4KCAvn5+Xn86du3rzneoftroE28/fbbRlBQkLFq1Srj4MGDxtSpU42IiAijurq6vZd23du0aZPx85//3Pjd735nSDLeffddj/GXXnrJCA8PN4qLi40//elPxo9+9CMjPj7e+Prrr82acePGGUOGDDF27NhhfPjhh8Ztt91mTJkypY3P5Ppks9mMN9980zhw4IBRVVVl3H///UbPnj2NM2fOmDVPPvmkERcXZ5SVlRm7d+82RowYYdx1113m+IULF4yBAwcaycnJxt69e41NmzYZ3bp1M/Ly8trjlK477733nrFx40bj008/NY4cOWI899xzRmBgoHHgwAHDMOivN+3cudO49dZbjcGDBxszZswwt9Pja/PCCy8YAwYMMP72t7+Zf7788ktzvCP3lyDURoYPH25kZWWZrxsaGozY2FhjwYIF7biqjufSINTY2GjExMQYL7/8srmttrbWCA4ONv7rv/7LMAzD+OSTTwxJxq5du8yaP/zhD4afn5/x17/+tc3W3lHU1NQYkoxt27YZhvFNPwMDA43169ebNYcOHTIkGQ6HwzCMb8Kqv7+/4XQ6zZrXXnvNCAsLM+rq6tr2BDqIyMhI44033qC/XvTVV18ZvXv3Nux2u3HfffeZQYgeX7sXXnjBGDJkyGXHOnp/+WisDdTX16uyslLJycnmNn9/fyUnJ8vhcLTjyjq+Y8eOyel0evQ2PDxciYmJZm8dDociIiI0bNgwsyY5OVn+/v6qqKho8zVf706fPi1JioqKkiRVVlbK7XZ79Lhv377q2bOnR48HDRrk8YNKbTabXC6XDh482Iarv/41NDTo7bff1tmzZ5WUlER/vSgrK0upqakevZT4N+wtR48eVWxsrP7pn/5J6enpOn78uKSO398b/idLXw/+93//Vw0NDc1+mnV0dLQOHz7cTqu6MTidTkm6bG+bxpxOp7p37+4x3qlTJ0VFRZk1+EZjY6NycnJ09913a+DAgZK+6V9QUFCzX0B8aY8v9x40jUHav3+/kpKSdP78ed10001699131b9/f1VVVdFfL3j77be1Z88e7dq1q9kY/4avXWJiolavXq0+ffrob3/7m+bOnat77rlHBw4c6PD9JQgBMGVlZenAgQP66KOP2nspN5w+ffqoqqpKp0+f1n//938rIyND27Zta+9l3RC++OILzZgxQ3a7XSEhIe29nBvS+PHjzb8PHjxYiYmJ6tWrl9555x117ty5HVd27fhorA1069ZNAQEBze6gr66uVkxMTDut6sbQ1L+WehsTE6OamhqP8QsXLujkyZP0/yLZ2dnasGGDPvjgA91yyy3m9piYGNXX16u2ttaj/tIeX+49aBqDFBQUpNtuu00JCQlasGCBhgwZoqVLl9JfL6isrFRNTY3uuOMOderUSZ06ddK2bdu0bNkyderUSdHR0fTYyyIiIvT9739fn332WYf/N0wQagNBQUFKSEhQWVmZua2xsVFlZWVKSkpqx5V1fPHx8YqJifHorcvlUkVFhdnbpKQk1dbWqrKy0qzZsmWLGhsblZiY2OZrvt4YhqHs7Gy9++672rJli+Lj4z3GExISFBgY6NHjI0eO6Pjx4x493r9/v0fgtNvtCgsLU//+/dvmRDqYxsZG1dXV0V8vGDNmjPbv36+qqirzz7Bhw5Senm7+nR5715kzZ/TnP/9ZPXr06Pj/htv1Vm0Lefvtt43g4GBj9erVxieffGJMmzbNiIiI8LiDHpf31VdfGXv37jX27t1rSDIWL15s7N271/jLX/5iGMY3j89HREQYv//97419+/YZEyZMuOzj87fffrtRUVFhfPTRR0bv3r15fP7/TJ8+3QgPDze2bt3q8WjsuXPnzJonn3zS6Nmzp7FlyxZj9+7dRlJSkpGUlGSONz0am5KSYlRVVRklJSXGd77znevi0djrwbPPPmts27bNOHbsmLFv3z7j2WefNfz8/IzS0lLDMOivL1z81Jhh0ONr9bOf/czYunWrcezYMePjjz82kpOTjW7duhk1NTWGYXTs/hKE2tDy5cuNnj17GkFBQcbw4cONHTt2tPeSOoQPPvjAkNTsT0ZGhmEY3zxC//zzzxvR0dFGcHCwMWbMGOPIkSMec/z97383pkyZYtx0001GWFiY8fjjjxtfffVVO5zN9edyvZVkvPnmm2bN119/bfz0pz81IiMjjdDQUOPBBx80/va3v3nM8/nnnxvjx483OnfubHTr1s342c9+Zrjd7jY+m+vTE088YfTq1csICgoyvvOd7xhjxowxQ5Bh0F9fuDQI0eNr8/DDDxs9evQwgoKCjO9+97vGww8/bHz22WfmeEfur59hGEb7XIsCAABoX9wjBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALIsgBAAALOv/ASW12bcPrsFcAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "input_ids = dataset['train']['input_ids']\n",
    "pd.Series(input_ids).apply(len).hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d278028c-193e-4cd6-b443-46eabfbe11d2",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "d278028c-193e-4cd6-b443-46eabfbe11d2",
    "outputId": "50a9b078-0a5d-4756-ca0d-4ee525974060"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatasetDict({\n",
       "    train: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 172839\n",
       "    })\n",
       "    test: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "    val: Dataset({\n",
       "        features: ['label', 'input_ids', 'attention_mask'],\n",
       "        num_rows: 57613\n",
       "    })\n",
       "})"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f4136b95-d3e1-4b1a-861c-e92b6f44a423",
   "metadata": {
    "id": "f4136b95-d3e1-4b1a-861c-e92b6f44a423"
   },
   "outputs": [],
   "source": [
    "def compute_metrics(p):\n",
    "    preds = np.argmax(p.predictions, axis=1)\n",
    "    return {\"accuracy\": (preds == p.label_ids).mean()}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f59d37f9-d732-4543-90c0-315bedf9415b",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "f59d37f9-d732-4543-90c0-315bedf9415b",
    "outputId": "0effc495-9c1b-4b55-a703-20d76f8813b4"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.10/dist-packages/transformers/training_args.py:1474: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead\n",
      "  warnings.warn(\n",
      "PyTorch: setting up devices\n",
      "The default value for the training argument `--report_to` will change in v5 (from all installed integrations to none). In v5, you will need to use `--report_to all` to get the same behavior as now. You should start updating your code and make this info disappear :-).\n"
     ]
    }
   ],
   "source": [
    "epochs = 1\n",
    "\n",
    "training_args = TrainingArguments(\n",
    "    output_dir=\"./bert_clf_results\",\n",
    "    num_train_epochs=epochs,\n",
    "    per_device_train_batch_size=16,\n",
    "    gradient_accumulation_steps=2,\n",
    "    per_device_eval_batch_size=32,\n",
    "    load_best_model_at_end=True,\n",
    "\n",
    "    # some deep learning parameters that the Trainer is able to take in\n",
    "    warmup_ratio=0.1,\n",
    "    weight_decay = 0.05,\n",
    "\n",
    "    logging_steps=1,\n",
    "    log_level='info',\n",
    "    evaluation_strategy='epoch',\n",
    "    eval_steps=50,\n",
    "    save_strategy='epoch'\n",
    ")\n",
    "\n",
    "# Define the trainer:\n",
    "\n",
    "trainer = Trainer(\n",
    "    model=sequence_clf_model,\n",
    "    args=training_args,\n",
    "    train_dataset=dataset['train'],\n",
    "    eval_dataset=dataset['val'],\n",
    "    compute_metrics=compute_metrics,  # optional\n",
    "    data_collator=data_collator  # technically optional\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5bfdefac-a0d4-435f-be2f-1287547b4397",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 180
    },
    "id": "5bfdefac-a0d4-435f-be2f-1287547b4397",
    "outputId": "4ababd69-b504-435c-8827-4610ab5acb4f"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "***** Running Evaluation *****\n",
      "  Num examples = 57613\n",
      "  Batch size = 32\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='1801' max='1801' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [1801/1801 02:38]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'eval_loss': 1.6827906370162964,\n",
       " 'eval_accuracy': 0.04603127766302744,\n",
       " 'eval_runtime': 158.8995,\n",
       " 'eval_samples_per_second': 362.575,\n",
       " 'eval_steps_per_second': 11.334}"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.evaluate()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "603b86ef-3da5-4c58-a593-7c8386229d8a",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 596
    },
    "id": "603b86ef-3da5-4c58-a593-7c8386229d8a",
    "outputId": "1450980b-1778-4891-bb1c-5ac7f7d1f764"
   },
   "outputs": [
    {
     "metadata": {
      "tags": null
     },
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "***** Running training *****\n",
      "  Num examples = 172,839\n",
      "  Num Epochs = 1\n",
      "  Instantaneous batch size per device = 16\n",
      "  Total train batch size (w. parallel, distributed & accumulation) = 32\n",
      "  Gradient Accumulation steps = 2\n",
      "  Total optimization steps = 5,401\n",
      "  Number of trainable parameters = 65,785,349\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='5176' max='5401' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [5176/5401 19:38 < 00:51, 4.39 it/s, Epoch 0.96/1]\n",
       "    </div>\n",
       "    <table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       " <tr style=\"text-align: left;\">\n",
       "      <th>Epoch</th>\n",
       "      <th>Training Loss</th>\n",
       "      <th>Validation Loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table><p>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='5401' max='5401' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [5401/5401 23:24, Epoch 0/1]\n",
       "    </div>\n",
       "    <table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       " <tr style=\"text-align: left;\">\n",
       "      <th>Epoch</th>\n",
       "      <th>Training Loss</th>\n",
       "      <th>Validation Loss</th>\n",
       "      <th>Accuracy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.980200</td>\n",
       "      <td>0.819233</td>\n",
       "      <td>0.716418</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table><p>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "***** Running Evaluation *****\n",
      "  Num examples = 57613\n",
      "  Batch size = 32\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='3602' max='1801' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [1801/1801 25:52]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Saving model checkpoint to ./bert_clf_results/checkpoint-5401\n",
      "Configuration saved in ./bert_clf_results/checkpoint-5401/config.json\n",
      "Model weights saved in ./bert_clf_results/checkpoint-5401/model.safetensors\n",
      "\n",
      "\n",
      "Training completed. Do not forget to share your model on huggingface.co/models =)\n",
      "\n",
      "\n",
      "Loading best model from ./bert_clf_results/checkpoint-5401 (score: 0.819233238697052).\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "TrainOutput(global_step=5401, training_loss=0.8730425443986548, metrics={'train_runtime': 1405.4036, 'train_samples_per_second': 122.982, 'train_steps_per_second': 3.843, 'total_flos': 3506405066166240.0, 'train_loss': 0.8730425443986548, 'epoch': 0.9999074331204295})"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "07f68e34-3d42-484c-93a9-a44e7d206acc",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 198
    },
    "id": "07f68e34-3d42-484c-93a9-a44e7d206acc",
    "outputId": "6e0d3377-b39c-424c-f9a8-876295371207"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "***** Running Evaluation *****\n",
      "  Num examples = 57613\n",
      "  Batch size = 32\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "      \n",
       "      <progress value='1801' max='1801' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      [1801/1801 02:43]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "{'eval_loss': 0.8123031258583069,\n",
       " 'eval_accuracy': 0.717233957613733,\n",
       " 'eval_runtime': 163.3375,\n",
       " 'eval_samples_per_second': 352.724,\n",
       " 'eval_steps_per_second': 11.026,\n",
       " 'epoch': 0.9999074331204295}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.evaluate(dataset['test'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5bf055e5-fc9a-4986-8c5a-2b59a87f4363",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c55b7b6e-64f9-4da3-802f-f480c9045ac4",
   "metadata": {
    "id": "c55b7b6e-64f9-4da3-802f-f480c9045ac4"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Model Description</th>\n",
       "      <th>Raw Accuracy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Babbage - 1 epoch</td>\n",
       "      <td>0.64676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Babbage - 4 epochs</td>\n",
       "      <td>0.63208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.5 - 1 epoch + no system prompt</td>\n",
       "      <td>0.63454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.5 - 1 epoch + system prompt</td>\n",
       "      <td>0.64423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DistilBERT</td>\n",
       "      <td>0.71723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Model Description  Raw Accuracy\n",
       "0                 Babbage - 1 epoch       0.64676\n",
       "1                Babbage - 4 epochs       0.63208\n",
       "2  3.5 - 1 epoch + no system prompt       0.63454\n",
       "3     3.5 - 1 epoch + system prompt       0.64423\n",
       "4                        DistilBERT       0.71723"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# Create a dictionary with your data\n",
    "\n",
    "data = {\n",
    "    'Model Description': [\n",
    "        'Babbage - 1 epoch',\n",
    "        'Babbage - 4 epochs',\n",
    "        '3.5 - 1 epoch + no system prompt',\n",
    "        '3.5 - 1 epoch + system prompt',\n",
    "        'DistilBERT'\n",
    "    ],\n",
    "    'Raw Accuracy': [\n",
    "        0.6467637512367,\n",
    "        0.6320795653758701,\n",
    "        0.6345442868796973,\n",
    "        0.6442296009581171,\n",
    "        0.71723395761\n",
    "    ]\n",
    "}\n",
    "\n",
    "# Create DataFrame\n",
    "df = pd.DataFrame(data)\n",
    "\n",
    "# To make it more readable, let's round the numeric values to a fixed number of decimal places:\n",
    "df_rounded = df.round(5)\n",
    "df_rounded"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "5a76b4d2-13ba-41e4-892b-35f3b9063e03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAGGCAYAAABmGOKbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5XklEQVR4nO3dd1xW9f//8cfFFFyAoAwHuNPMmVtzZKWZmvnRNHNluVc5PpmVWjlLM1eWlpYj0Y9ajkzFvVfOnBmSMhQQFBEBOb8/+HG+XoKK4wLH8367eYvrnPc51/u8ILie5/0+51gMwzAQERERERERkYfOLrs7ICIiIiIiIvKkUugWERERERERsRGFbhEREREREREbUegWERERERERsRGFbhEREREREREbUegWERERERERsRGFbhEREREREREbUegWERERERERsRGFbhEREREREREbUegWERERERERsRGFbhERkceAxWKx+mdvb4+Hhwf16tVj9uzZGIaR3V3MtPj4eNzc3LBYLLRr1y67uyM2FhwcnO7n927/Nm7c+ND7MXz48Pved0JCAl9++SXVqlUjb968ODk54ePjQ+XKlenduzebNm16oL6l1ahTp04PtB8ReTQ5ZHcHREREJPM+/fRTAJKSkjh9+jRLly5l06ZN7N27lylTpmRz7zJn4cKFxMbGYrFYWLJkCVFRUeTLly+7uyU24ubmZv7c3mzEiBEAGa7z9/e3dbcyLS4ujhdeeIH9+/fj7e3NG2+8gbe3N3FxcRw8eJDvvvuOmJgYXnjhhezuqog8ohS6RUREHiPDhw+3er1t2zbq1q3LtGnT+OCDDwgICMiejt2D7777Djs7OwYOHMi4ceOYM2cO77//fnZ3S2zEzc0t3c8t/F/ozmjdo+Trr79m//79vPTSSyxfvhwnJyer9ZcuXeLYsWPZ1DsReRxoermIiMhjrFatWpQuXRrDMNi3b5/Vun379tGvXz/Kly+Ph4cHOXLkoESJEnzwwQdcunTJqu0ff/yBxWLho48+slq+YcMGc8rvv//+a7WuTZs2WCwWzpw5k+n+HjlyhJ07d9KwYUOGDBmCk5MTM2fOvOM2CxcupGHDhuYx+Pv707ZtW/bu3Xtfbe80zfh203w7depkHuvkyZN57rnncHFxoV69egAkJiYyZcoUmjRpQpEiRXB2dsbDw4MXX3yR33///bbHdu7cOfr27UuJEiVwcXHBw8ODqlWr8tlnnwFw48YNChUqRJ48eYiLi8twH3369MFisbB48eI71jFNWFgYvXr1wt/fHycnJ7y8vGjZsmW6nx+A2bNnY7FYmD17Nhs2bKBevXrkzp2bPHny8Oqrr9osbP7xxx80adIET09PnJ2dKVasGIMGDSImJiZd20OHDtG2bVv8/f1xdnbGy8uLSpUq0b9/f5KSkoDUkfO0kF+/fn2rqex3s337dgB69OiRLnADuLu7U7NmzXTLk5OTmTZtGtWrVydPnjy4urpSsWJFpkyZQkpKitlu+PDh5smyOXPmWPVt9uzZd+2fiDz6NNItIiLyhHB0dLR6/f3337N06VJeeOEFXnzxRVJSUti3bx8TJkzg999/Z9euXeTOnRuAOnXq4OTkRFBQEF988YW5j6CgIKuv08KoYRhs2LABf39/ihYtmuk+fvfdd0BqiPXw8OC1117jf//7H1u2bKFOnTpWbQ3DoHPnzsyZMwdPT09atmyJl5cX586dY8OGDZQqVYoqVarcc9sH0a9fP7Zs2cKrr75KkyZNsLe3ByA6Opp+/fpRs2ZNGjVqhJeXF2FhYSxfvpwmTZrw/fff07VrV6t97d27l5dffpno6Gjq1q1Ly5YtiY+P56+//mL48OF8/PHH2Nvb8+677/Lpp5+yYMEC3n33Xat9XLt2jblz5+Lt7U3z5s3v2v9//vmH2rVrExoaSoMGDWjbti3//vsvixYtYuXKlfzvf/+jadOm6bZbsWIFv/76K40bN6Z79+789ddfrFq1ij179vDXX3/h6en5AFW1NmLECIYPH46HhwdNmzYlf/78HDp0iC+//JJVq1axY8cO8uTJA6QG7mrVqmGxWGjWrBkBAQFcvnyZ06dPM23aND7//HMcHR3p378/y5YtY9OmTXTs2PGepq+nXfpw8uTJTG+TlJTEa6+9xh9//EGpUqVo164dOXLkYMOGDfTp04ddu3bx888/A1CvXj1iYmKYNGkS5cuXp0WLFuZ+KlSokOn3FJFHmCEiIiKPPMDI6M/2pk2bDDs7O8PJyckIDQ21WhccHGwkJyen22bmzJkGYIwZM8ZqeZ06dQx7e3sjJibGXFa9enWjYsWKRr58+Yz27dubyw8cOGAARpcuXTJ9DNeuXTPc3d2NvHnzGvHx8YZhGMby5csNwGrfaWbMmGEAxvPPP2/VJ8MwjOTkZKvjvZe2n376qQEYGzZsSPee//zzjwEYHTt2tFresWNHAzB8fX2NM2fOpNsuISHB+Pfff9Mtj4mJMcqWLWu4u7ubx2wYhnH9+nXD39/fAIx58+al2+7mfYWGhhoODg5G5cqV07X78ccfDcAYOnRounUZeemllwzA+Pzzz62Wb9u2zbC3tzc8PDyMK1eupNu/vb29sW7dOqtt/vvf/xqAMXbs2Ey9960y+plev369ARg1atQwLl26ZLUurS/9+/c3l73//vsGYCxbtizd/qOjo40bN26Yr+/0fb+TtJ9RJycno0ePHsaKFSvS/b92q7T36t27t9X/g8nJyUaXLl3S9fl2P3ci8mTQ9HIREZHHyPDhwxk+fDgfffQRbdq04cUXX8QwDL788kt8fHys2hYpUsQcib1Zly5dyJMnD3/88YfV8oYNG3Ljxg3zTsxXrlxh7969NGrUiPr167N+/XqzbdoIeMOGDTPd90WLFnHp0iXatGmDi4sLAK+88gre3t4sXrw43ZT3yZMnAzBjxgzy5s1rtc7e3t7qeO+l7YMYPHhwhtfNOzs7U7BgwXTL8+bNS5cuXbh06RJ79uwxly9fvpzg4GCaNWuW4R3cb96Xj48PLVq0YN++femmgM+YMQM7O7t0I+AZOXfuHGvWrKFw4cIMHjzYal3NmjVp27Yt0dHRLFmyJN22b775Zrrv9XvvvQfA7t277/remfXNN98AqbM03NzcrNZ16tSJChUqMG/evHTbpf083czd3R07uwf/qNu0aVMmTZqEi4sL06dPp2nTpvj6+uLj48Nbb73F5s2brdqnpKQwefJkvL29mThxotX/g/b29nz11VdYLJYMj0NEnkyaXi4iIvIYSbsuNY3FYmHWrFl07tw5XdukpCRmzJjBL7/8wl9//UVsbKzVtaTnz5+3at+gQQOGDx9OUFAQzZo1Y9OmTSQnJ9OwYUP8/f1ZvHgxx44d45lnnjEDeIMGDTLd97Sp5Tf31cHBgbfeeouvvvqKn3/+mb59+wJw9epVjhw5QoECBahYseId93svbR9U1apVb7vu6NGjjB8/ns2bNxMWFkZCQoLV+pvrvXPnTgAaN26cqfft2bMnixcvZsaMGWYdDx8+zM6dO2ncuHGmpkv/+eefQOqlBLdeigCp38u5c+fy559/0qFDB6t1GU3NL1SoEEC6kyUPYseOHTg6OrJo0SIWLVqUbn1iYiIXL14073jfpk0bJk2aRIsWLWjVqhUvvvgitWrVolixYg+tTwB9+/ala9eurF27lu3bt/Pnn3+yfft25s+fz/z58/n4448ZOXIkkDoNPTo6mhIlSvD5559nuD8XFxfdfE3kKaLQLSIi8hgx/v/zuK9evcqOHTt455136N69O0WKFEkXgNu0acPSpUspWrQozZs3x9vbG2dnZyD1jszXr1+3al+9enVy5sxpjmIHBQXh5ORE7dq1zVAXFBREiRIl2Lx5M2XKlMHb2ztT/T527Bhbt26ldOnSVK9e3Wpdp06d+Oqrr/j+++/N0J12wyw/P7+77vte2j6o2x3vzp07adCggXmSolmzZuTJkwc7OzsOHDjAr7/+alXve+1z/fr1eeaZZ1iwYAFfffUVuXPnNsN3t27dMrWP2NhYgNuO+qctz+hmZbeOOkPqCRNIvdnbwxIVFUVycnK6k0u3iouLI1++fFStWpUtW7bwxRdfsHjxYvM66VKlSvHpp5/Stm3bh9Y3V1dXmjdvbl47n5iYyPfff0+/fv347LPPaNmyJRUqVCAqKgqAU6dO3fE4bndjPBF58ih0i4iIPIZy5szJiy++yPLly6lUqRIdO3bkxIkTuLq6Aqk36Vq6dKl59+y0gASp01/HjRuXbp+Ojo7Url2bP/74g/DwcIKCgqhRowaurq6ULFmSggULsm7dOipVqsSVK1fua5T7+PHjt71j9JEjR9i+fTs1a9Y0Q96to/EZuZe2gDnlODk5Od26jALnzW7X988//5xr166Zd/i+2ejRo/n1118fqM8A3bt3p1+/fsybN4+OHTsyd+5c/Pz8MrzxWUbSpt2Hh4dnuD4sLMyqXXbImzcvKSkpREdHZ3qbGjVqsGLFCq5fv86+fftYvXo1kydPpl27dnh5efHiiy/apK9OTk706tWLnTt3MnfuXNavX0+FChXM+r3++usZTtUXkaePrukWERF5jD333HO8++67nDt3jokTJ5rLT58+DUCzZs2sAjekXoN77dq1DPeXdt3uggULOHLkiNV1vA0aNGDjxo2sXbvWqu3dXL9+nZ9//hk7Ozu6dOnCO++8k+7fyy+/DKReywupJxWeffZZIiIizGnRt3MvbSH1Wl8g3SPQgAwfQ5YZp0+fxsPDI13gBsxr5G+WNtp/p8eJ3apjx464urry3XffsXDhQmJiYnjnnXcyvG4/I2lT77du3ZrhCYcNGzYAUKlSpUz36WGrXr06ly5d4ujRo/e8rbOzMzVr1mTkyJHmteE3n+xIq9PDHJkHzCcApM1CKV26NG5ubuzcudN8ZNnd2KpvIvKIyOYbuYmIiEgmcJu7lxuGYZw7d85wdnY23NzcjOjoaMMwDGPHjh0GYLRs2dKqbUREhFGpUiUDMIoUKZJuX3v37jUAI3/+/AZgbNu2zVw3e/Zsc52dnV26u0vfzrx58wzAaNy48W3bxMbGGjlz5jRcXV3Nu49/9913t70j+Y0bN6zuIH0vbXfu3GkARp06dYykpCRzeUhIiFGoUKE73r38n3/+ybD/L7/8sgEYBw8etFqedqd4wPjxxx/N5TffvXz+/Pnp9pfRndANwzC6du1qAIafn59hb29/23a306hRIwMwxo8fb7V8586dhr29veHu7m5cvnzZXJ52x/Cb+34zwHjhhRfuqQ83b3vrz/S6devMu5efP38+3TZxcXHGjh07zNfbtm2zuit8mvHjxxuAMXjwYHPZ1KlTDcD44Ycf7qmf06dPt3rPmx07dszw9PQ0AGP37t3m8o8//tgAjO7du2fYv9DQUOPo0aPm6ytXrhgWi8WoW7fuPfVNRB4Pml4uIiLymPPz86N79+5MmjSJcePGMXr0aJ5//nlq1arFkiVLqFmzJrVr1yYiIoLff/+dUqVK4evrm+G+KlasiLu7OxcuXCB37txWNw5LG9m+cOECVapUyfA634ykTS2/9TnVN8uTJw//+c9/mD17NnPnzqVXr1507dqVLVu28PPPP1OiRAmaN2+Ol5cXoaGhrF+/ni5dujB8+HBz35ltW61aNerWrcvmzZupWrUqDRo0ICIiguXLl/Pyyy9nOAJ+N/379+ePP/6gdu3atG7dmrx587J37162bt1Kq1atWLx4sVV7JycnFi1axEsvvUS7du2YMWMG1atXJyEhgWPHjhEUFJThaHTPnj2ZOXMm58+f57XXXsvwjul38u2331KrVi0GDRrEmjVrqFKlivmcbjs7O3788Udz5DY7NGzYkDFjxvDhhx9SokQJmjRpQkBAAHFxcZw9e5ZNmzZRu3ZtVq9eDcC4ceNYv349derUISAggFy5cnH06FF+//133N3dzTusQ+p18XZ2dnz44YccOXLEnPEwbNiwO/Zp9erV9OjRA39/f2rVqkWhQoW4fv06p06d4o8//iApKYm+ffvy/PPPm9t8/PHHHDx4kG+//Zbly5fToEED/Pz8uHDhAqdOnWLbtm188cUXlClTBoBcuXJRrVo1tmzZwltvvUXJkiWxt7enWbNmPPfccw+7zCKS1bI79YuIiMjdcYeRbsMwjPDwcMPV1dVwdXU1wsPDDcMwjKioKKNHjx5GkSJFDGdnZ6No0aLGhx9+aFy9etUoUqRIhiPdhmEYLVu2NACjSZMm6daVLFky3QjinZw4ccIAjAIFChiJiYl3bLtt2zYDMMqXL2+1fO7cuUbdunWNPHnyGM7Ozoa/v7/Rrl07Y9++fen2kdm2ly5dMrp27Wp4eXkZTk5ORtmyZY0ZM2bc9TndtxvpNozU5zlXq1bNyJUrl5E3b16jUaNGxqZNm+44Wnz27FmjR48ehr+/v+Ho6Gh4eHgYVatWNb744ovbvk+FChUMwFixYsVt29zJuXPnjO7duxuFCxc2HB0djXz58hnNmze3GqlNk9Uj3Wm2bNli/Oc//zF8fHwMR0dHw9PT0yhfvrwxYMAAY8+ePWa7P/74w+jUqZPxzDPPGHny5DFcXV2NkiVLGn369DGCg4PT7ffnn382ypcvb+TIkeOu/0+lOXHihPHll18ar7zyilGsWDHD1dXVcHJyMgoVKmS8/vrrxvLlyzPcLiUlxfjpp5+MBg0aGO7u7oajo6Ph6+tr1KpVy/jiiy+MkJAQq/anTp0ymjZtanh4eBgWi+WOdReRx4vFMP7/BSgiIiIi8ki7cuUKvr6+eHh48M8//zyU51CLiIht6Te1iIiIyGNi+vTpxMXF0bNnTwVuEZHHhEa6RURERB5hsbGxTJ8+nfPnz/P999/j4eHBiRMnsvXaaxERyTyFbhEREZFHWHBwMAEBATg7O1O5cmUmT56crY/1EhGRe6PQLSIiIiIiImIjuhhIRERERERExEYUukVERERERERsRKFbRERERERExEYUukVERERERERsxCG7OyAij4ZLly6RnJyc3d147Hl5eXHx4sXs7sZTRTXPeqp59lDds55qnvVU86ynmt8/BwcH3N3d794uC/oiIo+B5ORkkpKSsrsbjzWLxQKk1lIPhsgaqnnWU82zh+qe9VTzrKeaZz3VPGtoermIiIiIiIiIjSh0i4iIiIiIiNiIQreIiIiIiIiIjSh0i4iIiIiIiNiIQreIiIiIiIiIjSh0i4iIiIiIiNiIQreIiIiIiIiIjSh0i4iIiIiIiNiIQreIiIiIiIiIjSh0i4iIiIiIiNiIQreIiIiIiIiIjSh0i4iIiIiIiNiIQ3Z3QEQeDSuiHIi4Zsnubjz+wiMBx+zuxdNFNc96qnn2UN2znmqe9VTzB9KhQGJ2d0EyoJFuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYREREREXlC/Pvvv/j5+d3231dffQXA119/TZMmTXB2dsbX1xc/Pz8SEhLuuv+vvvrqjvv/999/AVizZg1dunShWrVqFCtWjPLly9O2bVt27Nhhtb/JkydTuXJlSpUqRefOnblw4YK5Ljk5mRdffJHBgwc/xAplPYVueeq0bt2a3bt33/f2gYGBDBo0yHw9depUxo0b9zC6JiIiIiLyQJycnKhYsaLVv2LFipnr8+fPD8DKlSs5c+YMXl5e97R/Hx+fdPt3c3MDwNnZmbx58wKwatUq/vjjD27cuIG/vz9RUVFs3ryZNm3asHfvXgA2b97MmDFjaNu2LStWrCAoKIiRI0ea7zVt2jSio6MZNmzYg5Qk2zlkdwdEHpapU6eyadMmAOzt7cmVKxeFCxemVq1a1KtXDzu71HNM3333HTlz5szUPlu3bs3AgQOpWrWquaxZs2Y0btw4U/0AyJUrF8WKFaN9+/YUKVLEat8Z6devH7Vq1eLo0aOMGDHCXJ47d26KFy/OW2+9ReHChW+7fZpWrVrdtY2IiIiIPFkKFCjAihUrrJZ99NFH/P3337i5udGyZUsA5syZg6+vL999953VZ867adeuHe3atTNfX7t2jWrVqgGpnz/z5MkDQLVq1ejYsSMVK1YE4I8//qBLly7cuHGD3377jSpVqnD06FEAqlatSokSJfD09OSvv/4C4MyZM0yaNInJkyeb+3xcKXTLE6VChQr07NmTlJQU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AeazCNNMmzYt3bbt2rXL8EYUaV555RVWrlzJjh07qFmzZqb6IyIiIiIi2cNiPG4T4kXEJn48fomIazeyuxsiIiIicp86FLi3SxnvNtItd+bo6JipG6nd34OHRUREREREROSuFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbMQhuzsgIo+GpvmSSUpKyu5uPNYsFgs+Pj6EhYVhGEZ2d+epoJpnPdU8e6juWU81z3qquTypNNItIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMO2d0BEXk0rIhyIOKaJbu78fgLjwQcs7sXTxfVPOtlc807FEjMtvcWERG5VxrpFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoljsKDAxk0KBBd2wzdepUxo0bl0U9kptt3LiRTp06ZXc3RESyTVRUFMOGDaNq1ar4+/vz7LPP0rp1a86ePWvVLjQ0lLJly+Ln54efnx8bNmzI1P537tzJW2+9RZkyZShatCjVqlXjk08+sWrz008/8corr1CmTBmKFStGjRo1+Oijj4iNjTXbTJ48mcqVK1OqVCk6d+7MhQsXzHXJycm8+OKLDB48+AEqISIijyqH7O6A2MbUqVPZtGmT+TpXrlwUK1aM9u3bU6RIkWzs2aNpyZIl7N+/n+DgYBwcHJg9e3Z2d0lERO4iOjqapk2bEhISgpOTE0WLFsUwDPbt20dERIT59y4lJYV+/foRExNzT/v/7bff6N27Nzdu3MDd3Z0SJUoQGxtLUFAQI0eOBGDhwoV8+OGHAPj5+VGgQAFOnjzJ7NmzuXDhAt9//z2bN29mzJgxDBgwgObNm9OwYUNGjhzJlClTAJg2bRrR0dEMGzbs4RVHREQeGQrdT7AKFSrQs2dPAGJiYvjll18YM2YM06dPz+aePXqSk5OpXr06JUuWZP369dndHRERyYSxY8cSEhJCqVKlWLBgAQUKFAAgMTERwzDMdtOnT2f79u289tprLF++PFP7jo+P58MPP+TGjRv07NmTIUOG4OCQ+rEpLi7ObLdnzx4g9eT2tm3bcHR05I033mDnzp2cO3cOgKNHjwJQtWpVSpQogaenJ3/99RcAZ86cYdKkSUyePJk8efI8YEVERORRpND9BHNwcMDNzQ0ANzc3WrRowSeffMLly5fNP+xz585lz549REVF4ebmRu3atWnVqpX5wSLN2rVrWbJkCVeuXKFSpUp0794dV1dXqzaLFi1i9erVJCcnU6tWLbp06WLu58CBA/zvf//j33//xc7OjpIlS9KpUye8vb3N7U+cOMHMmTMJDQ2lUKFCtGzZki+//JJx48bh7+8PQEhICHPnzuXYsWPkyJGD5557jo4dOz7wB5XWrVsDqdO1MyspKYkFCxawbds24uPjKVSoEG+99RZly5Y19zV79mx69uzJ3LlziYqKokyZMnTr1g1PT09zP2vWrGH58uVERkaSP39+3njjDerWrWuuv3r1KvPmzWPPnj3Ex8fj7e1Nu3btqFy5stnmwIEDzJkzh8jISEqXLk3Pnj1xd3d/oJqIiDzKDMNgxYoVAPj6+tK2bVtCQkLw9/end+/etGjRAoDDhw8zfvx4GjVqRIcOHTIdurds2WKOjF+8eJEqVaqQlJTE888/z6effkquXLmA1CC9YMEC4uLiqFWrFjlz5uTkyZMUKlSIESNGAJh/F3bv3o2Pjw+RkZHUrFkTwzAYPHgw9evXp0mTJg+xOiIi8ijRNd1PiYSEBDZv3oy3t7f5QQHAxcWFnj17MmHCBDp16kRQUBArV6602jY8PJwdO3YwZMgQhg4dSnBwMDNnzrRqc+TIEc6fP8/w4cPp168fu3fvZtGiRVbv37RpU8aMGcMnn3yCxWLhyy+/JCUlBUgdURg7diyFCxdm7NixtGnThnnz5lm9x9WrVxk5ciT+/v6MGTOGoUOHEhsby8SJEx92uTJl1qxZnDp1iv79+zN+/HiqV6/OqFGjCAsLM9tcv36dpUuX0rt3bz777DOuXr3KpEmTzPW7d+/mxx9/pGnTpnz11Vc0atSIadOmceTIESB1SuSoUaM4ceIEffr0YcKECbRr1w47Ozur91i+fDm9e/dmxIgRREZG8vPPP2ddIUREskFUVJQZijds2EBsbCx58+bl2LFj9OrVixUrVnDt2jV69eqFh4cHEyZMuKf9//333+bXixcvxsPDg4SEBNauXUurVq24fPkykHrS9rPPPsPBwYHz589z8uRJAIoXL46fnx8AdevW5b///S8LFiygadOmNGjQgE8++YQFCxZw9OhRPvzwQwYMGEC5cuWoVauW1d9PERF5/Gmk+wm2f/9+3n77bSA1mLm7uzNkyBCrwPbGG2+YX+fPn5/Q0FC2b99O8+bNzeVJSUn07t0bDw8PALp06cLo0aPp0KGDOZLu4OBAjx49cHZ2plChQrRu3Zq5c+fSpk0b7OzsqF69ulXfevToQdeuXTl37hyFCxdm69atWCwWunXrhpOTEwULFiQ6OpoZM2aY26xevZqAgADatWtntZ8ePXoQGhqKr6/vwyveXURGRrJx40amTZtm1qVZs2YcPHiQDRs2mH28ceMGXbp0oUSJEgD06tWLAQMGcPr0aYoXL87y5cupV68eL7/8MpA6WnPy5EmWL1/Os88+y+HDhzl9+jQTJ040jy9t+mSaGzdu8O6775qzBl555RUWL158274nJSWRlJRkvrZYLLi4uDykyoiI2J7FYuHGjRvm6xIlSrB27VoAGjVqxKlTp5g9eza7d+/mzJkzzJ8/n3z58mGxWKz2cfPrW928/0GDBtG/f3927drF66+/Tnh4OKtXr6ZNmzZs2bKFMWPGkDt3bpYsWYKnpyfvvPMOGzZsoHPnzma/+vbtS9++fc19Xrhwgc8//5xhw4bxyy+/EBgYyIQJE1i3bh3vv/8+5cuXp1SpUlb9vfm/YnuqedZTzbOeap41FLqfYGXLluXdd98FUq8/W7NmDaNHj2bUqFF4eXkBsH37dn7//XfCw8NJSEggJSUlXQDz9PQ0gyVAyZIlMQyD0NBQM3QXKVIEZ2dnqzYJCQlERUXh5eVFWFgYCxcu5PTp01y5csUc4Y6MjKRw4cKEhoZSuHBhnJyczH0UL17cqh9nz57lyJEj5omEm0VERGQYum9uW6dOHd57771M1e5uQkJCzBvz3Cw5OdlqJoG9vT3FihUzX/v5+ZEzZ07OnTtH8eLFOXfuHA0bNrTaR+nSpVm1ahUAwcHB5MuX744nFJydna2m6bu7u5sjMBlZunSpVSgPCAhg7NixdzliEZFHh4+PD56enjg5OZGYmEjlypXNm6ZVrlyZU6dOERoaav5N6dq1K2AdpN955x1atGjBggULMnyP0qVLm183aNAAHx8fGjdubC6LiYnBx8eHSZMmcfXqVRo2bEi9evUAePPNN9m9ezdHjx7F0dHR6pKiNH369KF8+fIMHDiQKlWq4OHhwYABAyhevDirVq3i8OHD5v5udvPve8kaqnnWU82znmpuWwrdT7Bbw1jRokXp2LEjQUFBvPnmm5w8eZJvvvmG1q1bU758eVxdXdm2bZt5jdzDNHbsWLy8vOjWrRvu7u4YhsEHH3xAcnJypveRkJBA5cqVad++fbp1aeH/VuPHjze/fpijuQkJCdjZ2TF27FirmQMAOXLkeGjvc/NJiNuxt7dPt+zmGwjd6vXXX6dp06bma53ZFJHHTdplPNWqVWPLli3s37+fkJAQIHWWF0DhwoXNG6pdvXo13T4SEhK4dOkSYWFh/Pnnn+Yo9DfffEPFihUpW7YsdnZ2pKSksGHDBp577jl2795tbp92QjkqKgqAQ4cO8c8//5AjRw62bt0KgJ2dHTExMVaziyB15tbKlStZu3Yt4eHhJCYm4uDgQFhYGFeuXAEgNjbW6nIli8WCt7c34eHhd/wdLw+Pap71VPOsp5o/GAcHB3Mw847tsqAv8gixs7MjMTERSL1xmZeXFy1btjTXR0ZGptsmMjKS6Ohoc7T75MmTWCwWq9HXs2fPkpiYaIbEU6dOkSNHDvLly8eVK1cIDQ2lW7duPPPMMwAcP37c6j18fX3ZsmULSUlJODo6AtbX00HqiOyuXbvw8vLKMGhmxFZn7fz9/UlJSSE2NtY8pozcuHGDM2fOmKP2oaGhXL16lYIFCwJQsGBBTpw4YTWacfz4cXN9kSJFiIqKeqjT5x0dHc0ai4g8jtI+GA4ePJhdu3Zx8uRJqlWrBqTeh8Te3p4+ffpQq1Ytq+22b9/Of/7zHyD1RqL169fHMAzi4+PNvznx8fEYhoGvry+dO3dm1qxZjBs3jl9//dV89nfJkiVp0qQJhmHQpEkTTpw4QXBwMFWrViVXrlwEBwcD0KRJE1xdXa0+yF65coWhQ4fSr18/8xFnderUYfr06Rw8eJCgoCDs7OzMG61ldOz6YJy1VPOsp5pnPdXctnQjtSdYcnIyMTExxMTEcO7cOX744QdztBgw76C6bds2wsPDWbVqldVZ/DSOjo5MnTqV4OBgjh07xo8//kiNGjWsRpeTk5OZPn06586dY//+/QQGBvLKK69gZ2dHzpw5yZ07N+vWrSM8PJwjR44wZ84cq/eoXbs2hmEwY8YMzp07x4EDB9LdYfbll18mLi6OSZMmcfr0acLDwzlw4ADTpk0zp6vfr8jISIKDg4mMjCQlJYXg4GCCg4NJSEjIsL2vry+1a9dmypQp7Nq1iwsXLnD69GmWLl1qjrJA6ij0Dz/8wKlTpzhz5gxTp06lRIkSZgh/7bXX2LhxI2vWrCEsLIwVK1awe/duXnvtNQDKlClDmTJl+Oqrrzh06BAXLlzgzz//5MCBAw90vCIiT4JKlSoRGBhIjRo1iI2N5fr169SpU4dly5alC9z3Y/jw4QwdOpQiRYpw5swZvLy86Ny5M0uXLjUvqXr//ff54osvKFeuHElJSURERFCiRAkGDhzI119/nW6fo0aNwt3d3XykJ0D//v1p2bIlbdq0Yc2aNYwfP95qeruIiDzeLIZOaTyRpk6dyqZNm8zXLi4u+Pr60rx5c6ubms2dO5cNGzaQlJREpUqVKFGiBIsWLWL27NkABAYGsmfPHho1asT//vc/4uLiqFy5Mu+995557fLUqVO5evUq/v7+/PHHHyQlJZmPDEsbUT106BA//vgjFy5cMEcPhg8fzsCBA6latSrwf48MO3/+PIULF6Zp06Z88803fP311+Yob1hYGPPmzePo0aMkJSXh5eVF+fLl6dix4wNNk761Xmk+/fRT81Evt0pOTmbJkiVs2rSJ6Oho8uTJQ4kSJWjdujWFCxc2HxnWo0cP5s6dS3R0NKVLl6ZHjx739MiwuLg4fvrpJ/bt20dCQgLe3t689dZbVKpUyXyPtO8XpN4R/csvvyQwMPCeavDj8UtEXLtx94YiItmsQ4HE7O5ClrNYLPj4+BAWFqbRqCyimmc91TzrqeYPxtHRMVPTyxW65ZG1ZcsWpk2bxpw5czJ1bfOjJqNA/ChT6BaRx4VCtz66ZQXVPOup5llPNX8wmQ3duqZbHhmbNm2iQIECeHh4EBwczLx586hRo8ZjGbhFRERERERAoVseITExMQQGBhITE4ObmxvVq1enbdu22d0tERERERGR+6bQLY+M5s2b07x58+zuxkNTr169DJ+xKiIiIiIiTw/dvVxERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhyyuwMi8mhomi+ZpKSk7O7GY81iseDj40NYWBiGYWR3d54KqnnWU81FRETujUa6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGxEoVtERERERETERhS6RURERERERGzEIbs7ICKPhhVRDkRcs2R3Nx5/4ZGAY3b34umimme9h1zzDgUSH9q+REREHjUa6RYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6H6CBAYGMmjQoOzuhoiIyH2Liopi2LBhVK1aFX9/f5599llat27N2bNnrdqFhoZStmxZ/Pz88PPzY8OGDZl+jzttu3v3bnr06EHNmjUpXrw4ZcuWpUWLFqxevdpqHwsXLqRGjRqUKFGCVq1a8ffff1utf/vtt2nXrt19VEBERJ40DtndAYA1a9awZs0aLl68CEDBggVp1aoVFStWvO02GzduZNq0aVbLHB0dmTdv3gP354cffuDEiRP8+++/+Pn5MX78+Afep9y7Xr160aRJE1599dXs7spjY/jw4fj7+9OpU6fs7oqIyD2Ljo6madOmhISE4OTkRNGiRTEMg3379hEREUGRIkUASElJoV+/fsTExNzze9xt2y1btvDbb7/h6emJv78/p0+fZs+ePezZs4fp06fTrFkzTp8+zcCBA2nVqhVDhgyhYcOGvP/++/z6668ALF26lB07drB+/fr7LYWIiDxBHonQ7eHhQbt27fDx8cEwDDZt2sS4ceMYN24chQoVuu12Li4uTJo0ySZ9ql+/PqdPn053Zv1Jt3HjRjZu3Mjw4cOzuyuPpeTkZBwcHon/rUREHjtjx44lJCSEUqVKsWDBAgoUKABAYmIihmGY7aZPn8727dt57bXXWL58+T29x922TXvvunXrAnD48GGaNGlCSkoKS5cupVmzZhw7doyUlBSqVKmCt7c3xYoV46+//gJSTxx8+umnDBo0iMKFC99vKURE5AnySKSDKlWqWL1u27Yta9as4dSpU3cM3RaLBTc3t4feny5dugCp07UzG7qvXr3Kzz//zJ49e0hOTqZo0aJ07NgRf39/c1979uzhpZdeYsmSJVy5coVKlSrRvXt3XF1dgdSz70uWLGHdunVcvnwZPz8/3nrrLSpUqGC+T1RUFD///DMHDx4kOTkZPz8/3nnnHUqUKGG22bx5MwsXLiQuLo6KFSvSrVs3XFxcHk5xbnHx4kVmzZrFiRMnSE5OxsvLi/bt21OxYkX69u1Lo0aNaNasmdk+ODiYwYMH880331CgQAEWLVrEhg0biI2NJXfu3FSrVo0uXbowfPhwLl68yJw5c5gzZ45ZQ4Djx48zf/58/v77b/LkycPzzz9Pu3btyJEjB5A6Qt6gQQPCwsLYtWsXuXPnpkuXLpQsWZJvv/2Ww4cPU6BAAXr06EGxYsVue2ytW7ema9eu7N27l6NHj+Lu7k779u2pXr06ABcuXKB3797079+fP/74g9OnT/Puu+9St27dO34fb95u9erV/P333xQuXJg+ffoQHx/PzJkzOX/+PM888wy9e/cmT548AEydOpWrV68SEBDA6tWrSU5OplatWnTp0gUHBwemTp3KX3/9xV9//cWqVasAmDJlCvnz53+433QRERswDIMVK1YA4OvrS9u2bQkJCcHf35/evXvTokULIDUEjx8/nkaNGtGh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iI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI04ZHcHROTR0DRfMklJSdndjceaxWLBx8eHsLAwDMPI7u48FVTzrKeai4iI3BuNdIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI0odIuIiIiIiIjYiEK3iIiIiIiIiI04ZHcHROTRsCLKgYhrluzuxuMvPBJwzO5ePF1UcysdCiRmdxdERETkJhrpFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhW4RERERERERG1HoFhEREREREbERhe5sEBgYyKBBg7K7GyIi8oSLiopi2LBhVK1aFX9/f5599llat27N2bNnuXbtGl27dqVatWoUK1aMUqVK8cILLzBmzBgSEhIy/R5HjhwhICAAPz8//Pz8OH36tLlu+/bt5vJb/23evNlsN3nyZCpXrkypUqXo3LkzFy5cMNclJyfz4osvMnjw4IdTFBERkSzmcC+N16xZw5o1a7h48SIABQsWpFWrVlSsWPG222zcuJFp06ZZLXN0dGTevHn30V1rP/zwAydOnODff//Fz8+P8ePHP/A+5dFw9OhRRowYwY8//kjOnDmzuzuPhQsXLtC7d2/GjRuHv79/dndHRLJZdHQ0TZs2JSQkBCcnJ4oWLYphGOzbt4+IiAjc3NxYt24dfn5+lCxZkvDwcE6fPs3kyZO5dOkSY8eOvet7XLt2jV69epGYmHjHdk5OTpQtW9ZqWZ48eQDYvHkzY8aMYcCAATRv3pyGDRsycuRIpkyZAsC0adOIjo5m2LBh91kJERGR7HVPodvDw4N27drh4+ODYRhs2rSJcePGMW7cOAoVKnTb7VxcXJg0adIDdzYj9evX5/Tp05w9e9Ym+39Ubdy4kY0bNzJ8+PDs7or8f8nJyTg43NP/UiIiNjN27FhCQkIoVaoUCxYsoECBAgAkJiZiGAZOTk6cPHkSJycnIPV3WJ06dQgJCWHv3r2Zeo8RI0Zw+vRpmjZtyooVK27bLn/+/Lddf/ToUQCqVq1KiRIl8PT05K+//gLgzJkzTJo0icmTJ5shXURE5HFzTwmhSpUqVq/btm3LmjVrOHXq1B1Dt8Viwc3N7b46eCddunQBUqdrZzZ0X716lZ9//pk9e/aQnJxM0aJF6dixozkyGBgYyJ49e3jppZdYsmQJV65coVKlSnTv3h1XV1cAUlJSWLJkCevWrePy5cv4+fnx1ltvUaFCBfN9oqKi+Pnnnzl48CDJycn4+fnxzjvvUKJECbPN5s2bWbhwIXFxcVSsWJFu3brh4uLycIpzi40bNzJ79mz69+/PnDlziIyMpHTp0vTs2RN3d/dMH9etdu7cyaJFiwgPD8fZ2ZmAgAAGDRrEmTNn+Oyzz5g+fbrV93727NmcOXOGkSNHcvHiRWbNmsWJEydITk7Gy8uL9u3bU7BgQUaMGAFA586dAXjhhRfo1asXKSkp/Prrr6xbt46YmBh8fX154403qF69OvB/I+RDhw5l/vz5nD9/npIlS9K/f3/OnDnDTz/9RHR0tPk9dXZ2vmO9evbsydy5c4mKiqJMmTJ069YNT09P4P9+Vl555RWWLFlCZGQkCxcuJDIykh9++IHDhw9jZ2dH+fLl6dKli1mHtO0aN27MokWLiIuL44UXXqBLly4sX76cFStWYBgGTZo0oWXLlmafWrduTdeuXdm7dy9Hjx7F3d2d9u3bm8feu3dvAHMKZpkyZXRSRuQpZRiGGXJ9fX1p27YtISEh+Pv707t3b1q0aAGkjkAPHDiQY8eOERYWRkREBADPP//8Xd9jzZo1/Pzzz3Tp0oVnn332jqE7IiKCZ555BoBixYrRvXt3mjZtCmCOgO/evRsfHx8iIyOpWbMmhmEwePBg6tevT5MmTe67FiIiItntvoflUlJS2LFjB9evX6dkyZJ3bJuQkEDPnj0xDIOAgADatm17x5BuSxMmTMDJyYmhQ4fi6urK2rVr+eyzz5g0aRK5cuUCIDw8nB07djBkyBDi4+P59ttvmTlzJn379gVg1apVLF++nPfee4+AgADWr1/P2LFjmTBhAj4+PiQkJDB8+HA8PDwYMmQIbm5unDlzBsMwzH5ERESwe/duhgwZwtWrV5k4cSLLli2jbdu2Njv269evs3z5cnr37o3FYmHy5Mn8/PPPmT6uW126dIlJkybx1ltvUbVqVRISEjh27BiQGvjy58/P5s2badasGZA6irJlyxbat28PwKxZs0hOTmbEiBE4Oztz7tw5cuTIgaenJx988AFfffUVX3/9Na6uruZIzLJly9iyZQvvvvsuPj4+HDt2zBwBKVOmjNm3RYsW0aVLF5ydnZk4cSITJ07E0dGRvn37kpCQwJdffsnvv/9ufvC8Xb2WLl1K7969cXBwYObMmUyaNInPPvvMbBMeHs6uXbsYOHAgdnZ2pKSkMG7cOHLkyMGIESO4ceMGs2bN4uuvv7YKwBERERw4cICPPvqI8PBwJkyYQEREBD4+PowYMYITJ04wffp0ypUrZ3WiZuHChbRr145OnTqxefNmvv76a7788ksKFizIqFGjGDp0KB9//DGFChXSqLvIUywqKoqYmBgANmzYgLe3N3nz5uXYsWP06tULBwcHM/QeP36cAwcOmNu2bNnS6vdcRsLDw/nggw945pln+Oijj/j111/v2D5fvny4u7tz5swZ/vzzT7p168aoUaPo2LEjdevW5b///S+zZ8/m+++/p0GDBnzyyScsWLCAo0ePsmLFCgYMGMC6devIkycP/fv35z//+c8D1UdERCQr3fOn8pCQED766COSkpLIkSMHAwcOpGDBgrdt7+vrS48ePShSpAjx8fH89ttvDBs2jAkTJpAvX74H6vy9On78OKdPn2bmzJk4OjoC0KFDB/bs2cPOnTt58cUXAUhKSqJ37954eHgAqSPqo0ePpkOHDri5ubF8+XKaN29OrVq1AGjfvj1Hjx5l5cqVdO3ala1bt3L58mVGjx5tBnlvb2+rvhiGQa9evcyR7bp163LkyBGbHv+NGzd49913zb688sorLF682Fx/t+O61aVLl7hx4wbVqlXDy8sLgMKFC5vrGzRowIYNG8zQvW/fPpKSkqhRowYAkZGRVKtWzdwmbeojYNYtb9685jXdSUlJLF26lI8//tg80VOgQAGOHz/O2rVrrUL3m2++SenSpc1+zJ8/n8mTJ5vvUa1aNY4ePXrH0H3jxg26dOliht5evXoxYMAATp8+TfHixYHUEwm9e/c2pz0eOnSIkJAQpkyZYo6I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96ynmmc91TzrqeYPxtHRMVPXdNvdtYXIfYqPj+f48eNs3br1tjdHExEREREReZI98I3URG5n3LhxnD59mkaNGlldgiAiIiIiIvK00PRyEQE0vVzkSaHp5U8m1T3rqeZZTzXPeqr5g9H0chEREREREZFsptAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI24pDdHRCRR0PTfMkkJSVldzceaxaLBR8fH8LCwjAMI7u781RQzUVERORRp5FuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYVuERERERERERtR6BYRERERERGxEYfs7oCIPBpWRDkQcc2S3d14/IVHAo7Z3Yuny1NQ8w4FErO7CyIiInKfNNItIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIo+JqKgohg0bRtWqVfH39+fZZ5+ldevWnD17lmvXrtG1a1eqVatGsWLFKFWqFC+88AJjxowhISHhjvs9ceIE/fv3p27dupQqVYrSpUvzyiuvsGDBAqt2ERERdOvWjYCAAHx9ffHz86NHjx7p9jd58mQqV65MqVKl6Ny5MxcuXDDXJScn8+KLLzJ48OCHUxQREZFHnEK3EBgYyKBBg+7YZurUqYwbNy6LeiQ3y8z3R0SefNHR0TRt2pQff/yRixcvUrRoUby8vNi3bx8REREkJiaybt06HBwcKFmyJK6urpw+fZrJkyfz6aef3nHfBw4cYNGiRURFRVG4cGGSkpI4fPgwAwcOZNq0aWa7ixcvsnz5ciwWCzly5MhwX5s3b2bMmDG0bduWFStWEBQUxMiRI83106ZNIzo6mmHDhj2cwoiIiDziHLK7A3L/pk6dyqZNm8zXuXLlolixYrRv354iRYpkY88ebUlJSQwdOpSzZ88ybtw4/P39s7tLIiJ3NXbsWEJCQihVqhQLFiygQIECACQmJmIYBk5OTpw8eRInJycgdUS5Tp06hISEsHfv3jvu28/PjxkzZtC4cWPs7e05d+4cjRo14vLlyyxZsoSePXsCUKxYMY4cOULZsmUpVKgQ586dS7evo0ePAlC1alVKlCiBp6cnf/31FwBnzpxh0qRJTJ48mTx58jy02oiIiDzKFLofcxUqVDA/DMXExPDLL78wZswYpk+fns09e3TNnTsXDw8Pzp49m91dERHJFMMwWLFiBQC+vr60bduWkJAQ/P396d27Ny1atADAycmJgQMHcuzYMcLCwoiIiADg+eefv+P+a9eubfW6YMGC+Pn5cfnyZZydnc3lLi4uuLq63nFfZcuWBWD37t34+PgQGRlJzZo1MQyDwYMHU79+fZo0aXJPxy8iIvI4U+h+zDk4OODm5gaAm5sbLVq04JNPPuHy5cvmKMLcuXPZs2cPUVFRuLm5Ubt2bVq1aoWDg/W3f+3atSxZsoQrV65QqVIlunfvnu7D1aJFi1i9ejXJycnUqlWLLl26mPs5cOAA//vf//j333+xs7OjZMmSdOrUCW9vb3P7EydOMHPmTEJDQylUqBAtW7bkyy+/tBpxDgkJYe7cuRw7dowcOXLw3HPP0bFjx4cyKvLnn39y6NAhPvjgA/7888+7tr969So///wze/bsITk5maJFi9KxY0ezr4GBgezZs4eXXnrptrVLSUlhyZIlrFu3jsuXL+Pn58dbb71FhQoVzPeJiori559/5uDBgyQnJ+Pn58c777xDiRIlzDabN29m4cKFxMXFUbFiRbp164aLiwsAO3fuZNGiRYSHh+Ps7ExAQACDBg267fRPEXm8REVFERMTA8CGDRvw9vYmb968HDt2jF69euHg4EDTpk0BOH78OAcOHDC3bdmyJZ999tk9vd/OnTs5ceIEAO3atbunbevWrct///tfZs+ezffff0+DBg345JNPWLBgAUePHmXFihUMGDCAdevWkSdPHvr3789//vOf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IEOGDDFvPOTg4MCwYcP46aefGD16NCkpKRQsWJB33nknU/10cXHh2LFjrFq1imvXruHp6UmHDh2oWLHiwy2IiIiIiIjcM4uhyfuSjbZs2cK0adOYM2dOph/j9ShJe073zdeVP65+PH6JiGs37t5QRLJchwKJ2d0Fk8ViyfRItzw8qnvWU82znmqe9VTzB+Po6KgbqcmjZ9OmTRQoUAAPDw+Cg4OZN28eNWrUeCwDt4iIiIiIyN0odEuWiomJITAwkJiYGNzc3KhevTpt27bN7m6JiIiIiIjYhEK3ZKnmzZvTvHnz7O7GQ9O6dWtat26d3d0QEREREZFH1P3dClpERERERERE7kqhW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbEShW0RERERERMRGFLpFREREREREbMQhuzsgIo+GpvmSSUpKyu5uPNYsFgs+Pj6EhYVhGEZ2d+epoJqLiIjIo04j3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMK3SIiIiIiIiI2otAtIiIiIiIiYiMO2d0BEXk0ODjo18HDolpmPdU866nm2UN1z3qqedZTzbOean5/Mls3i2EYho37IiIiIiIiIvJU0vRyEZGH5Nq1awwZMoRr165ld1eeGqp51lPNs4fqnvVU86ynmmc91TxrKHSLiDwkhmHwzz//oAlEWUc1z3qqefZQ3bOeap71VPOsp5pnDYVuERERERERERtR6BYRERERERGxEYVuEZGHxNHRkVatWuHo6JjdXXlqqOZZTzXPHqp71lPNs55qnvVU86yhu5eLiIiIiIiI2IhGukVERERERERsRKFbRERERERExEYUukVERERERERsRKFbRERERERExEYcsrsDIiKPstWrV7N8+XJiYmIoUqQIXbp0oXjx4rdtf/XqVRYsWMDu3buJi4vDy8uLjh07UqlSpfve59PmYdd86dKl7N69m/Pn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",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Find the minimum accuracy values for setting xlim\n",
    "min_raw_accuracy = min(df_rounded['Raw Accuracy']) - 0.05\n",
    "max_raw_accuracy = max(df_rounded['Raw Accuracy']) + 0.02\n",
    "\n",
    "# Set the style\n",
    "plt.style.use('ggplot')\n",
    "\n",
    "# Define figure and axis for the accuracy plot\n",
    "fig, ax = plt.subplots(figsize=(10, 4))  # Adjust the figure size as needed\n",
    "\n",
    "df_rounded.sort_values('Raw Accuracy', inplace=True, ascending=True)\n",
    "\n",
    "ax.barh(df_rounded['Model Description'], df_rounded['Raw Accuracy'], color='skyblue')\n",
    "ax.set_title('Raw Accuracy on Test Set')\n",
    "ax.set_xlim(min_raw_accuracy, max_raw_accuracy)  # Extend the x-axis\n",
    "for i, v in enumerate(df_rounded['Raw Accuracy']):\n",
    "    ax.text(v, i, \"{:,.2f}%\".format(v * 100), va='center', ha='left', fontweight='bold')\n",
    "\n",
    "# Adjust the layout\n",
    "plt.tight_layout()\n",
    "\n",
    "# Show the plot for accuracy\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "43ed1e2e-d63f-4363-968c-95f41c62e507",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "gpuType": "T4",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "517dcd9158d44df3beb73e81141f5a56": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6d390b97453f43fe84a7a37c0efc8740",
      "placeholder": "​",
      "style": "IPY_MODEL_f2a00172e2ec44daa931cc6d1ff4f5ac",
      "value": " 57613/57613 [00:16&lt;00:00, 2666.92 examples/s]"
     }
    },
    "5c93d9b6edc7496c895ef3c2b5abc985": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "5dfe52672d564ca3b9abacc81cd6d879": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6d390b97453f43fe84a7a37c0efc8740": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6e985377fd19491eb096d8c61fcb0890": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "8262cbbf290a4dcbb580f4535cd6e0e4": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "abfb88580b244b84b1aedfcda581d7e0": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_8262cbbf290a4dcbb580f4535cd6e0e4",
      "max": 57613,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_5c93d9b6edc7496c895ef3c2b5abc985",
      "value": 57613
     }
    },
    "d47af86af90e49999b8d75a00432ad4e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "dd58f4f2ea6b4d509657c6d5eec173ef": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_e84b9c11d19a4bfbaabf7c58a9862c67",
       "IPY_MODEL_abfb88580b244b84b1aedfcda581d7e0",
       "IPY_MODEL_517dcd9158d44df3beb73e81141f5a56"
      ],
      "layout": "IPY_MODEL_6e985377fd19491eb096d8c61fcb0890"
     }
    },
    "e84b9c11d19a4bfbaabf7c58a9862c67": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_5dfe52672d564ca3b9abacc81cd6d879",
      "placeholder": "​",
      "style": "IPY_MODEL_d47af86af90e49999b8d75a00432ad4e",
      "value": "Map: 100%"
     }
    },
    "f2a00172e2ec44daa931cc6d1ff4f5ac": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
